#!/bin/bash

#########################
#   名称: frameworks
#   用途: 提供一个脚本框架，可以通过"source ./framework/frameworks.sh"和". ./framework/frameworks.sh"应用
#   命名空间建议: framework
#########################
#shellcheck disable=SC1090

echo "初始化框架中...";
##set -e; #设定如果初始化框架的过程中发生了错误，则立即退出

#只读变量

#_framework_ROOT: 整个框架的根目录，就是frameworks.sh所在的地方
readonly _framework_ROOT="$(cd "$(dirname "${BASH_SOURCE:-$0}")" || exit 2;pwd)";
#_framework_MODULES: 组件存放目录
#shellcheck disable=SC2034
readonly _framework_MODULES="$_framework_ROOT/modules";
#_framework_APPNAME: 应用名称，默认为调起的文件名
#shellcheck disable=SC2034
readonly _framework_APPNAME="$(basename "$0")";

function _framework_load_module()
{
    local file="$1"
    if [ -f "$file" ] && [ "$(sed -n 2,2p < "$file")" == "#IModule" ];then
    {
        source "$file";

        _framework_resolve_dependencies;
        function _framework_resolve_denpendencies(){ false; }
    };fi;
}

for f in "$_framework_MODULES"/*;do
{
    _framework_load_module "$f";
};done

function _framework_ThrowErrorAndExit()
{
    local type="${1:-"$(_Locale_get _Generic_Unknown)"}";
    local detail="${2:-"$(_Locale_get _Generic_NoMsg)"}";
    case $type in
        (1 | Network)
            _Logger_Log Error "$(_Locale_get _Framework_Error_network)";
            exit 1;
            ;;
        (2 | SwitchDir)
            _Logger_Log Error "$(_Locale_get _Framework_Error_switch_dir)";
            exit 2;
            ;;
        (3 | InvaildValue)
            _Logger_Log Error "$(_Locale_get _Framework_Error_invaild_value "$detail")";
            exit 3;
            ;;
        (4 | ProgramNotFound)
            _Logger_Log Error "$(_Locale_get _Framework_Error_dependency_not_resolved "$detail")";
            exit 4;
            ;;
        (254 | Debug)
            _Logger_Log Error "$(_Locale_get _Framework_Error_debug)";
            exit 254;
            ;;
        *)
            _Logger_Log Error "$(_Locale_get _Framework_Error_unknown "$type" "$detail")";
            exit 255;
            ;;
    esac;
}

_Logger_Log Ok "$(_Locale_get _Framework_Init_done)";
##set +e; #初始化完成，去除设定
